function ElementZoomerPageActionIcon(oElementZoomer) {
  addRequestHandler(
      "pageActionClicked", 
      function (uUnused, oSender, fSuccessCallback, fFailureCallback) {
        if (oElementZoomer.changeZoom()) fSuccessCallback();
        else fFailureCallback('Cannot change zoom');
      }
  );
  function showPageActionIcon(sIconName, sTitle) {
    debugLog("showIcon(" + sIconName + ", " + sTitle + ")");
    backgroundRequest(
        "showPageActionIcon", 
        {"name": sIconName, "title": sTitle},
        function showIconSuccess() {
          debugLog("showIcon(" + sIconName + ", " + sTitle + ") => success");
        },
        function showIconFailed(sErrorMessage) {
          debugLog("showIcon(" + sIconName + ", " + sTitle + ") => failed: " + sErrorMessage);
        }
    );
  }
  
  function removePageActionIcon() {
    debugLog("removeIcon()");
    backgroundRequest("removePageActionIcon", null,
      function removeIconSuccess() {
        debugLog("removeIcon() => success");
      },
      function removeIconFailed(sErrorMessage) {
        debugLog("removeIcon() => failed: " + sErrorMessage);
      }
    );
  }
  this.update = function () {
    if (oElementZoomer.isZoomed()) {
      showPageActionIcon("restore", "Click to restore the zoomed element to its original size.");
    } else if (oElementZoomer.canZoom()) {
      showPageActionIcon("zoom", "Click to zoom the selected element.");
    } else  {
      if (goOptions.debug.icon_always_visble) {
        showPageActionIcon("disabled", "No element selected for zooming.");
      } else {
        removePageActionIcon();
      }
    }
  }
}